/*
 * FileName:    ICommonDao.java
 * Description: 共通基本DAOインターフェイス
 * History:     2010-8-23 (廖宝俊) 1.0 Create
 */
package com.sn.system.common.dao;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

import org.springframework.orm.hibernate3.HibernateTemplate;

import com.sn.system.common.command.Page;


/**
 * The <code>ICommonDao</code> class 共通基本DAOインターフェイス
 *
 * @author  廖宝俊
 * @version 1.0, 2010-8-23
 */
public interface ICommonDao {
	/**
     * 対象を新たに増加する
     * @param entity   増加された対象
     */
    void insert(final Object entity);

    /**
	 * 更新対象
	 * @param entity　　　更新された対象
	 */
    void update(final Object entity);

    /**
     * 登録対象
     * @param entity    登録された対象
     */
    void save(final Object entity);

    /**
     * 登録対象、後再びデータベースからこの対象を読み取ります。
     * @param entity    登録された対象
     */
    void saveAndRefresh(final Object entity);

    /**
     * 登録対象集合
     * @param entities  登録された対象集合
     */
    void saveAll(final Collection entities);

    /**
     * 削除対象
     * @param entity    削除された対象
     */
    void delete(final Object entity);

    /**
     * 削除対象集合
     * @param entities  削除された対象集合
     */
    void deleteAll(final Collection entities);

    /**
     * sessionをクリア
     */
    void sessionClear();

    /**
     * １つの対象を取ります
     * @param entityClass   対象のクラス
     * @param id            キー
     * @return  対象
     */
    Object load(final Class entityClass, final Serializable id);

    /**
     * １つの対象を検索します
     * @param entityClass   対象のクラス
     * @param id            キー
     * @return  対象
     */
    Object get(final Class entityClass, final Serializable id);

    /**
     * 指定するクラスの全部対象を取ります
     * @param entityClass クラス
     * @return 対象リスト
     */
    <T>List<T> loadAll(final Class<T> entityClass,final String... orderStr);


    /**
     * 検索の文を実行します
     * @param queryString 検索の文
     * @param values        パラメーター
     * @return 対象リスト
     */
    List executeSql(String queryString, final Object... Conditions);

    /**
     * @param queryString       HSQL
     * @param pageNumber        当面のページ番号
     * @param Conditions        検索の条件
     * @return  Page実例
     */
    Page find(final String queryString,final int pageNumber, final Object... Conditions);


    /**
     * @param queryString       HSQL
     * @param pageNumber        当面のページ番号
     * @param pageSize           ページサイズ
     * @param Conditions        検索の条件
     * @return  Page実例
     */
    Page find(final String queryString,final int pageNumber, final int pageSize, final Object... Conditions);

    /**
     * 空っぽなPageを創立します、そしてdataをpageのdataの中に置きます。
     * @param data 　データー
     * @return page
     */
    Page putDataToPage(List data);
}
